home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 132_01 / fpass1.c < prev    next >
Text File  |  1985-08-19  |  2KB  |  109 lines

  1. /*
  2.     Overlap tests for two objects in the same space.
  3.     Entry    : A pointer to each scan list entry.
  4.     Exit    : Null if no overlap, 1 if overlap
  5.     Calls    : None
  6.         Linkage to object definition list via scan pointers.
  7. */
  8.     #ASM
  9. XOFF    EQU    2*2
  10. YOFF    EQU    3*2
  11. OBJOFF    EQU    5*2
  12. XMAXOF    EQU    2*2
  13. YMAXOF    EQU    2*3
  14. ;overlap(scan,scan1)
  15. xleft    rmb    2
  16. xright    rmb    2
  17. obj    rmb    2
  18. xm    rmb    2
  19. yupper    rmb    2
  20. ylower    rmb    2
  21. ym    rmb    2
  22. overlap:
  23. ;int    scan[],scan1[];
  24. ;    Ascertain the left-most (x) and upper (y) objects.
  25. ;    xleft= scan[X];
  26.     ldx    4,s    ; x -> scan
  27.     ldy    2,s    ; y -> scan1
  28.     ldd    XOFF,x
  29.     std    xleft
  30. ;    xright    = scan1[X];    /* assume this is correct */
  31.     ldd    XOFF,y
  32.     std    xright
  33. ;    obj    = scan[OBJPTR];
  34.     ldd    OBJOFF,x
  35.     std    obj
  36. ;    if(xleft > xright)     { /* if assumption invalid,switch */
  37.     ldd    xleft
  38.     cmpd    xright    ; xleft - xright
  39.     ble    ovl1    ; if xleft <= xright
  40.         ldd    xright
  41.         ldu    xleft
  42.         stu    xright
  43.         std    xleft
  44. ;        obj    = scan1[OBJPTR]
  45.         ldd    OBJOFF,Y
  46.         std    obj
  47. ;    }
  48. ovl1:
  49. ;    xm= 255&(PIXBYT*obj[XMAX]);
  50.     pshs    x
  51.     ldx    obj
  52.     ldd    XMAXOF,x
  53.     clra
  54.     lslb
  55.     lslb        ; multiply offset by 8
  56.     lslb
  57.     std    xm
  58.     puls    x
  59. ;    yupper    = scan[Y];    /* same procedure for y axis */
  60.     ldd    YOFF,x
  61.     std    yupper
  62. ;    ylower  = scan1[Y];
  63.     ldd    YOFF,y
  64.     std    ylower
  65. ;    obj     = scan[OBJPTR];
  66.     ldd    OBJOFF,x
  67.     std    obj
  68. ;    if(yupper > scan1[Y]) {
  69.     ldd    yupper
  70.     cmpd    ylower    ; yupper - ylower
  71.     ble    ovl2
  72.         ldu    ylower
  73.         ldd    yupper
  74.         stu    yupper
  75.         std    ylower
  76. ;        obj    = scan1[OBJPTR];
  77.         ldd    OBJOFF,y
  78.         std    obj
  79. ovl2:
  80. ;    ym    = 255&obj[YMAX];
  81.         ldu    obj
  82.         ldd    YMAXOF,u
  83.         clra
  84.         std    ym
  85. ;    if((xleft + xm)>= xright)
  86.         ldd    xleft
  87.         addd    xm
  88.         cmpd    xright ; xleft - xright
  89.         bls    ovl3
  90. ;        if((yupper + ym)>= ylower)
  91.             ldd    yupper
  92.             addd    ym
  93.             cmpd    ylower    ; (yupper + ym) - ylower
  94.             bls    ovl3
  95. ;            return 1;
  96.             ldd    #1
  97.             rts
  98. ;    return 0;
  99. ovl3:
  100.     ldd    #0
  101.     rts
  102.     #ENDASM
  103.  
  104. 
  105. s
  106.     #ENDASM
  107. }
  108.  
  109. í╩±zµ╩φí╩±>@░Gzµí░GG╖╩E⌡zµ╩>+2R3*a8e3~#■┬δ├%!e3>╛#┬